Posts

Open Science - SFD 2011

Image
For the third year I was invited to give a talk at Software Freedom Day @ Alexandria University 2011 and I wanted to talk about something that links what I am doing now (I am a research assistant at E-JUST) and open source so I started researching Open Source Science. Starting from the fact that I use a lot of open source modules and packages in my work developed by others and put on the internet for everyone to use. I began to understand the wider concept of open science which aims at enabling everyone who is willing to participate in any scientific endeavor to have a part in it. Facilitated by the internet, ideas, tasks, documents, code, scientific data and even videos of experiments are shared by the project's coordinator for anyone to participate in anyway and every way possible. And the results are amazing !! My main goal from the presentation and this post is to show how openness can boost research either by using the collective intellige...

Contributing to Open Source - SFD 2010

Today I presented "Contributing to Open Source" as a part of Software Freedom Day @ Alexandria University 2010 held at Bibliotheca Alexandrina. The audience was great and helped in making the presentation better than I anticipated. This is the presentation I hope it would be useful to those that missed the event. Contributing to Open Source View more presentations from Ahmed Saeed . It was cool to be presenting at the BA for the first time.

Research Opportunities in Egypt

Lately I have been exploring the research communities and opportunities in Egypt, specially Computer Science oriented research groups. I was amazed by the number of opportunities that are available now specially for a fresh graduate like myself. I'll try to list some of the opportunities I have came across and that I consider tempting. 1. Cairo Microsoft Innovation Center (CMIC) : One of the best research centers and it collaborates with a lot of the institutions that follows. There you'll get the chance to work with cutting edge technologies developing projects that will directly help the Arabic community. 2. Government Funded Research Projects: Development funds like ITIDA, NTRA and STDF are providing support for research projects and IT projects on all level. It's quite interesting to be working on an independent research project that totally matches your interests with absolutely no restrictions and get payed. 3. E-JUST &  N...

A Research Graduation Project Accepted in PACT 2010

I have been working throughout the past year on my graduation project. The main target of the project was accelerating a Numerical Weather Prediction model (the Weather Research and Forecasting model) using GPUs. We implemented the latest version of one of the modules and our implementation was published as part of the latest release of a system supported by the United States Air Force and the National Oceanic and Atmospheric Agency (NOAA). After our thesis defense we decided to go on with this work and submit it as a research poster to a high ranking conference and we chose PACT. International Conference on Parallel Architectures and Compilation Techniques (PACT) is a top tier, rank 1 conference. We submitted our work as a research poster for the ACM Student Research Competition in the Undergraduate Category ( I have already particpated at an ACM SRC at MobiCom'09 last summer ). I was informed on 22nd of July 2010 that our work "Quantifying the Impact of GPU Specific Optim...

CUDA compilation on Linux (Makefiles)

I have been struggling with compiling complex CUDA code, with complex I mean a lot of .cu .F .cpp and .c files. I have created a makefile that can help you compile that kind of code. I'll try to give a quick view of it here explaining some parts: First you'll need to specify the CUDA path and the compilers and linkers. Here I am using gcc and g++ for .c and .cpp files and nvcc for .cu files: CUDA_INSTALL_PATH ?= /usr/local/cuda CXX := g++ CC := gcc LINK := g++ -fPIC NVCC := nvcc -ccbin /usr/bin Then you need to specify where to locate the CUDA header files : # Includes INCLUDES = -I. -I$(CUDA_INSTALL_PATH)/include # Common flags COMMONFLAGS += $(INCLUDES) NVCCFLAGS += $(COMMONFLAGS) CXXFLAGS += $(COMMONFLAGS) CFLAGS += $(COMMONFLAGS) Then you specify where to locate the CUDA binaries for linking : LIB_CUDA := -L$(CUDA_INSTALL_PATH)/lib -lcudart Then you specify the object files that the executable depends on and the name of the executable flle:...

Contributing to Open Source (Why? and How?)

Image
Open Source products are everywhere now, probably now you're using some of them. And I am sure that a lot of people are appreciating the role of open source. This post is about giving back to the community, helping others and moving forward one of the applications/tools you're using as a part of your everyday life. Why Contribute to Open Source?? Sun Microsystems had a slogan "Change (Y)our world". And that summarizes what contributing to open source is all about. It's about making You better and making The World better. Let's make it clearer. When you contribute to open source it helps you in some many ways, it gets you to code and practice and enhance your programming skills. Then gets your code reviewed, reviewed and then reviewed once more before it becomes a part of an official release. And finally it gets you to document your code. Of course how much a project adds to your skills depends on the scale of the project and the importance of the featu...

KNN Algorithm and KD-Trees

Image
I am taking a Pattern Recognition course this semester, it's not really one of my favourite topics but I am doing OK. We had an assignment last week to test and compare different classification algorithms. One of the algorithms we were asked to implement was KNN (K Nearest Neighbours) . We were asked to find a way that makes searching for the K Nearest Neighbours faster; that's what this post about. The problem briefly is that: Given two sets of K dimensional points find the N nearest points (using Euclidean distance or any other measurement) to a K dimensional point X. The Naive Solution: Go through the list, find the distance between X and all the points in the two sets, get the smallest N elements in the distances list... Simple enough. As part of our assignment we were given a dataset of 100,000 points which proved this algorithm to be very slow. My Naive WRONG Solution: I thought that it was easy to index the points in a way that makes it efficient to find the ne...