In answer to your original question, assuming you had a very complex C 
program that Julia just didn't handle efficiently (it's possible), or you 
had already written a very large external library which you didn't want to 
rewrite in Julia, and someone else hasn't already written an interface to 
it from Julia....

First you want to make a shared library. For this you can use gcc. First 
compile your C file to an object file with the -c option. Then link your 
object file to make a shared library with the -shared option. This will 
make a shared library (.so or .dll or .dylib, depending on what operating 
system you have).

It's the .so or .dll or .dylib file that Julia wants to be able to find, 
not the C file.

So long as your shared library has no other dependencies, you can set 
Julia's DL_LOAD_PATH to specify the location of the shared library (I'm not 
sure if this is considered best practice or not).

Otherwise, on most systems the dynamic linker has various places it will 
look for your library. This depends on your system though, so it varies 
between Unix, Linux, Windows and OSX.

On Tuesday, 24 February 2015 14:10:31 UTC+1, Bill Hart wrote:
>
> One important thing to note is that if you do a + b at the top level, it 
> won't be fast.
>
> But as soon as you do a + b inside a function, it will be as fast as C.
>
> For example
>
> a = 20
> b = 10
> for i = 1:1000000000
>    c = a + b
> end
>
> takes about 34s
>
> But the following is almost instantaneous:
>
> function doit()
>    a = 20
>    b = 10
>    for i = 1:1000000000
>       c = a + b
>    end
> end
>
> doit()
>    
>
> On Tuesday, 24 February 2015 14:03:07 UTC+1, Tim Holy wrote:
>>
>> Giovanni, 
>>
>> Before you start going to that kind of effort, take a look at 
>>
>> julia> @code_native 3+5 
>>         .text 
>> Filename: int.jl 
>> Source line: 12 
>>         push    RBP 
>>         mov     RBP, RSP 
>> Source line: 12 
>>         add     RDI, RSI 
>>         mov     RAX, RDI 
>>         pop     RBP 
>>         ret 
>>
>> I think you're going to have a pretty hard time finding a C compiler that 
>> does 
>> better than this :-). Especially since it gets inlined at the call site. 
>>
>> Best, 
>> --Tim 
>>
>> On Tuesday, February 24, 2015 01:13:52 AM [email protected] wrote: 
>> > Hello, 
>> > 
>> > I am a beginner to Julia and would like to try out some features. I 
>> would 
>> > like to improve performances of some bottleneck functions by 
>> translating 
>> > them into C. 
>> > A simple example is : 
>> > main.jl 
>> > 
>> > a ::Int64 = 20 
>> > b ::Int64 = 10 
>> > ccall(:do_sum, Int64, (Int64, Int64), a, b) 
>> > 
>> > 
>> > 
>> > test.c 
>> > #include <stdio.h> 
>> > 
>> > int do_sum (int a,int b) 
>> > { 
>> > int c; 
>> > c = a+b; 
>> > printf("f\n:",c); 
>> > return c; 
>> > } 
>> > 
>> > where should I put the C file ? 
>> > 
>> > Thanks, 
>> > G. 
>>
>>

Reply via email to