Search Results

Search found 2400 results on 96 pages for 'some noob student'.

Page 56/96 | < Previous Page | 52 53 54 55 56 57 58 59 60 61 62 63  | Next Page >

  • How to know if a file has 'access' monitor in linux

    - by J L
    I'm a noob and have some questions about viewing who accessed a file. I found there are ways to see if a file was accessed (not modified/changed) through audit subsystem and inotify. However, from what I have read online, according to here: http://www.cyberciti.biz/tips/linux-audit-files-to-see-who-made-changes-to-a-file.html it says to 'watch/monitor' file, I have to set a watch by using command like: # auditctl -w /etc/passwd -p war -k password-file So if I create a new file or directory, do I have to use audit/inotify command to 'set' watch first to 'watch' who accessed the new file? Also is there a way to know if a directory is being 'watched' through audit subsystem or inotify? How/where can I check the log of a file?

    Read the article

  • Second vm not connecting to internet KVM

    - by potsed
    I cannot connect a second VM to the internet. I have two VM's set up and running, the first vm can connect to the Internet fine, the second does not even get a ping through. They are both set up in the same way with the same base packages but different secondary packages. Different sized disks etc. I am a noob with VM and perhaps I am missing something very simple. Like maybe that they have the same mac address or something. They are both using a bridged connection. Any help would be appreciated, and if you need logs please let me know which ones.

    Read the article

  • Win7 and Ubuntu refuse to coexist

    - by Jeremy
    I'll make this quick: I have an HP laptop with win7, I installed Ubuntu on a separate partition, and when I tried to boot win7 from grub I got the loading screen and no progress-ever. I did a /fixmbr with the windows recovery cd and got back windows, but wiped out grub and my access to Ubuntu. I reinstalled grub from the Ubuntu live usb ( I know I did this correctly) and now windows won't boot, again. I'm a linux noob at a loss. Your wisdom is greatly appreciated! Update in response to Scott Severance: your instructions say to determine the main partition on my computer. I'm not sure what this means... my windows partition is at sda2, my boot partition is at sda1, and my linux root partition is at sda7... Which is the "main" partition? UPDATE: I determined that you were probably referring to the linux root(/) partition, because this was the only partition for which I could follow your instructions without errors. Now, Windows is booting fine (thanks to /fixmbr), but even after the grub instructions there is no grub. It boots straight into windows.

    Read the article

  • Ubuntu Raring on iMac 2008; graphics update ATI Radeon HD 2600 Pro broke my Raring this morning!

    - by user197406
    Was working on my iMac(2008) 20,5" this morning when again some GLX etc updates appeared! As usual I let the update-installer do it's job; when finished updating, my screen got scrambled; I can not work anymore as the screen shivers, shakes and graphics is one big mess. Ctrl+Alt+F1 does not work either as most of the time my screen is black completely! When booting into OSX 10.8.5 (Raring dual boot with OSX 10.8.5), OSX graphics works flawlessly! Can anybody indicate me which ATI Radeon drivers I can download which repairs the 'malversation' of this mornings updates? I guess I will have to startup with some rescue boot disk (Knoppix?) to do manipulations… As I'm still a noob as well I need clear explanations (please). Raring worked perfectly in dual boot on my iMac until this mornings updates! Needles to say the 'final resort' is restarting (re)installation of Ubuntu Raring, but want to attempt to rescue my present 13.04. Thank you! Kind regards, Gaytan!

    Read the article

  • How do i reinstall windows back on to linux without flashdrive or cd?

    - by user287536
    I know this is for ubuntu. but elementary os and ubuntu are really similar, so any answers or instructions will work on this os. plus the people here at ubuntu are alot better with these kind of problems. I've installed elementary os, and i am somewhat satisfied. However, many of the addons and applications i used to use are incompatible with linux and wine doesnt work with these apps that work with drivers and plugins. My recovery hp partition was replaced by the grub partition somehow. i dont' have a cd or a working flashdrive. i have found many links, but i dont understand the instructions to a full level. ive heard that you can create a partition, extract your windows iso there, and then boot from it. i have done the first 2 steps, but i dont know how to boot from a certain partition. i know how to with command prompt, but not with terminal and/or grub. Please help? im a noob in linux, ive only installed it for a month

    Read the article

  • connect to my database from another computer

    - by user3482102
    Sorry for being a :noob I am a student working on a dbms project on my laptop. I have installed mariadb and I have root access. Similarly the case with my friend's laptop. The problem is we both want to work on same database collectively as we are partners of a team in the project. How can I create a database in mariadb that we both can share? How to access that database? Please specify the software to use and implementation.

    Read the article

  • Running a cronjob

    - by Ed01
    've been puzzling over cronjobs for the last few hours. I've read documentation and examples. I understand the basics and concepts, but haven't gotten anything to work. So I would appreciate some help with this total noob dilemma. The ultimate goal is to schedule the execution of a django function every day. Before I get that far, I want to know that I can schedule any old script to run, first once, then on a regular basis. So I want to: 1) Write a simple script (perhaps a bash script) that will allow me to determine that yes, it did indeed run successfully, or that it failed. 2) schedule this script to run at the top of the hour I tried writing a bash script that simple output some text to the terminal: #!/bin/bash echo "The script ran" Then I dropped this into a .txt file MAILTO = *****.******@gmail.com 05 * * * * /home/vadmin/development/test.sh But nothing happened. I'm sure I did many things wrong. Where do I start to fix all of this?

    Read the article

  • Ubuntu works in try out but not when installed, how to fix?

    - by QVaren
    I've got quite a problem with it, perhaps the problem lies with me but I thought I fixed it, I believe the opposite now... Anyhow, I started off with a 64-Bit Windows 7 platform and I wanted something new then the same boring windows, I heard about Ubuntu before but I didn't see a reason to change it. Now I had found my reason, so what did I do was do the installation via an USB, I went "try out before installation" first and it worked perfectly, however... When I installed it, deleted my Window 7 and tried to reboot with my fresh oh-so-clean new OS, it didn't want to load. At a certain point it said to boot up from a bootable option or something like that. Where it came to was that I couldn't load it up. Now, I wanted to switch back to Windows 7 because it didn't work and now I can't switch back because my harddrive switched modus because of Linux files (From NTFS to 4ex or something, I forgot). I'm currently typing this in the try out version of Ubuntu since I can't switch back to either Windows 7 or to the installed version of Ubuntu. So, my question follows: Can I fix it by keeping Ubuntu? Because I like Ubuntu. Also a side note: I'm a total noob when it comes down to this sort of things.

    Read the article

  • For photography use, is Unity is overheating my laptop? Should I try OpenSuse instead?

    - by SoT
    I am a perfect noob here in the Linux world. Previously was using Windows 7. Mine is an HP laptop - Intel core2duo T5470 @ 1.60GHz × 2 / 965GM with 2GB RAM. I installed Ubuntu 12.04TLS and is quite liking it's display. I really recognized it is 3D before knowing it was Unity 3D interface. My uses are image editing, home uses, downloads, browsing etc.. No video-editing/gaming at all. Being a Photography enthusiast I use image editing programs fairly more. But I am now feeling my laptop is getting a bit overheated - processor and hard-disk. I tried lm-sensor and could not make out much of it. Installed Xsensors.7. It gives the same output as lm-sensors gave me. It gives temperature for 4 things Temp1, temp2, temp3, and temp4. For "acpitz". Please guide me in this. However I wanted to ask something more. Which one is better for working with images - photography I mean - openSUSE 12.1 or Ubuntu with unity 3D? Can I get the display quality with the openSUSE distribution? I heard for laptops openSUSE uses power more efficiently, is there any truth? Please suggest me whether I should try openSUSE or not. If so with which GUI? KDE or GNOME? Thanks in advance. Regards SoT

    Read the article

  • After installing Ubuntu my computer boots into GRUB rescue mode after displaying 'no such partition' error message.

    - by VictorVictor5
    I wanted Ubuntu on my Gateway Solo Laptop. It had Win98 on the C:\ and WinXP on the D:\. Before the install, I could not boot from CD, but I could boot from floppy. I installed Ubuntu to run alongside Windows XP as that was one of the options. It didn't detect Win98, but I swear it's on there. Install seemed fine and then it asked me to reboot. When I rebooted, I got the message error: no such partition and the grub rescue> command prompt. I've looked around, but some commands, like sudo, don't work. One command I did get to work was set root=(hd0,0) if that helps. I'm a noob, and it was a pain installing Win98 and XP since this system is so old. I don't want to wipe my drive and start all over! Additional details copied from comments Addendum, I restored my master boot record via my Win98 boot floppy and typing in frisk /mbr. But, I'd still like to get ubuntu - any help? If I restored my master boot record - did I delete Ubuntu?

    Read the article

  • Create / build / generate a web form that can be on my server and has modern looks and could be impl

    - by Luay
    I have a small web site and would like to add a 'contact us' form and a 'feedback' form. i would like the forms to satisfy the following: 1- be modern looking (with beautiful css effects) 2- the form fields are validated properly and 'inline'. What I mean is once a user skips a required field or enters an email address incorrectly some kind of tooltip or icon is displayed to ask him to cerrect the error (as opposed to a message box that appears after the user clicks 'submit') 3- once the submit button is clicked the form contents are emailed to me. 4- the whole thing can be setup by a noob like myself. 5- no ads on the form I have been searching for at least 5 days for a solution but I can't seem to find anything the would satisfy the above 5 conditions. I don't mind paying for a solution as long as it is hosted on my site and it is a one off payment and not a monthly payment. So far my search has lead me to the following: 1 wufoo. The good: the generated forms seem to look okay but not the best there is. The bad: the free service is limited to 100 submissions. ads on the form. it is not hosted on my server. Paid service requires monthly payments 2- emailmeform: almost same as above except the generated form looks old. They do have an offer where you pay only $4 to get the form and set it up on your own site but that doesn't solve the fact that the forms look old. 3- formAssembly: same as above with minor variations (the generated form looks better) 4- formchamp, formthis, kontaktr,... And other similar online services: the same problem. either the form generated looks outdated or require monthly payments or they put ads...they don't satisfy my conditions. 5- coffeecup form builder. a desktop software. The problem is the generated forms look too old and use flash. 6- simfatic. Another software. Much better than coffeecup. almost satisfies my conditions but the forms not as good as I like. 7- many, many php scripts or html templates that look so outdated or fail when tested (probably because they are too old). Seriously guys, how hard is this. At least 90%+ of website contain at least a 'contact us' form. Why aren't there better solutions? if there is I can't seem to find them. In terms of looks I want something similar to this: http://web-kreation.com/articles/lightform-free-ajaxphp-contact-form/ It is called lightform. And this is a perfect example of what I mean by 'inline' validation. the only problem: there is no script to handle sending the mail. Even if I find one, I don't know how to modify it for my needs. So could you please help me out. I really can't search anymore. I reached rock bottom with this issue. I need a complete solution. If nothing exists then at least a: 1- form template (html) that looks nice and can easily be modified 2- a validation script that does 'inline' validation like the example above (or similar to it) and can be easily implemented by a noob like me to work with the html form. 3- a php script that will handle sending the email and can be easily implemented (all three working in harmony). I hope there is a complete solution but am I asking for too much? Pretty please...help...

    Read the article

  • How John Got 15x Improvement Without Really Trying

    - by rchrd
    The following article was published on a Sun Microsystems website a number of years ago by John Feo. It is still useful and worth preserving. So I'm republishing it here.  How I Got 15x Improvement Without Really Trying John Feo, Sun Microsystems Taking ten "personal" program codes used in scientific and engineering research, the author was able to get from 2 to 15 times performance improvement easily by applying some simple general optimization techniques. Introduction Scientific research based on computer simulation depends on the simulation for advancement. The research can advance only as fast as the computational codes can execute. The codes' efficiency determines both the rate and quality of results. In the same amount of time, a faster program can generate more results and can carry out a more detailed simulation of physical phenomena than a slower program. Highly optimized programs help science advance quickly and insure that monies supporting scientific research are used as effectively as possible. Scientific computer codes divide into three broad categories: ISV, community, and personal. ISV codes are large, mature production codes developed and sold commercially. The codes improve slowly over time both in methods and capabilities, and they are well tuned for most vendor platforms. Since the codes are mature and complex, there are few opportunities to improve their performance solely through code optimization. Improvements of 10% to 15% are typical. Examples of ISV codes are DYNA3D, Gaussian, and Nastran. Community codes are non-commercial production codes used by a particular research field. Generally, they are developed and distributed by a single academic or research institution with assistance from the community. Most users just run the codes, but some develop new methods and extensions that feed back into the general release. The codes are available on most vendor platforms. Since these codes are younger than ISV codes, there are more opportunities to optimize the source code. Improvements of 50% are not unusual. Examples of community codes are AMBER, CHARM, BLAST, and FASTA. Personal codes are those written by single users or small research groups for their own use. These codes are not distributed, but may be passed from professor-to-student or student-to-student over several years. They form the primordial ocean of applications from which community and ISV codes emerge. Government research grants pay for the development of most personal codes. This paper reports on the nature and performance of this class of codes. Over the last year, I have looked at over two dozen personal codes from more than a dozen research institutions. The codes cover a variety of scientific fields, including astronomy, atmospheric sciences, bioinformatics, biology, chemistry, geology, and physics. The sources range from a few hundred lines to more than ten thousand lines, and are written in Fortran, Fortran 90, C, and C++. For the most part, the codes are modular, documented, and written in a clear, straightforward manner. They do not use complex language features, advanced data structures, programming tricks, or libraries. I had little trouble understanding what the codes did or how data structures were used. Most came with a makefile. Surprisingly, only one of the applications is parallel. All developers have access to parallel machines, so availability is not an issue. Several tried to parallelize their applications, but stopped after encountering difficulties. Lack of education and a perception that parallelism is difficult prevented most from trying. I parallelized several of the codes using OpenMP, and did not judge any of the codes as difficult to parallelize. Even more surprising than the lack of parallelism is the inefficiency of the codes. I was able to get large improvements in performance in a matter of a few days applying simple optimization techniques. Table 1 lists ten representative codes [names and affiliation are omitted to preserve anonymity]. Improvements on one processor range from 2x to 15.5x with a simple average of 4.75x. I did not use sophisticated performance tools or drill deep into the program's execution character as one would do when tuning ISV or community codes. Using only a profiler and source line timers, I identified inefficient sections of code and improved their performance by inspection. The changes were at a high level. I am sure there is another factor of 2 or 3 in each code, and more if the codes are parallelized. The study’s results show that personal scientific codes are running many times slower than they should and that the problem is pervasive. Computational scientists are not sloppy programmers; however, few are trained in the art of computer programming or code optimization. I found that most have a working knowledge of some programming language and standard software engineering practices; but they do not know, or think about, how to make their programs run faster. They simply do not know the standard techniques used to make codes run faster. In fact, they do not even perceive that such techniques exist. The case studies described in this paper show that applying simple, well known techniques can significantly increase the performance of personal codes. It is important that the scientific community and the Government agencies that support scientific research find ways to better educate academic scientific programmers. The inefficiency of their codes is so bad that it is retarding both the quality and progress of scientific research. # cacheperformance redundantoperations loopstructures performanceimprovement 1 x x 15.5 2 x 2.8 3 x x 2.5 4 x 2.1 5 x x 2.0 6 x 5.0 7 x 5.8 8 x 6.3 9 2.2 10 x x 3.3 Table 1 — Area of improvement and performance gains of 10 codes The remainder of the paper is organized as follows: sections 2, 3, and 4 discuss the three most common sources of inefficiencies in the codes studied. These are cache performance, redundant operations, and loop structures. Each section includes several examples. The last section summaries the work and suggests a possible solution to the issues raised. Optimizing cache performance Commodity microprocessor systems use caches to increase memory bandwidth and reduce memory latencies. Typical latencies from processor to L1, L2, local, and remote memory are 3, 10, 50, and 200 cycles, respectively. Moreover, bandwidth falls off dramatically as memory distances increase. Programs that do not use cache effectively run many times slower than programs that do. When optimizing for cache, the biggest performance gains are achieved by accessing data in cache order and reusing data to amortize the overhead of cache misses. Secondary considerations are prefetching, associativity, and replacement; however, the understanding and analysis required to optimize for the latter are probably beyond the capabilities of the non-expert. Much can be gained simply by accessing data in the correct order and maximizing data reuse. 6 out of the 10 codes studied here benefited from such high level optimizations. Array Accesses The most important cache optimization is the most basic: accessing Fortran array elements in column order and C array elements in row order. Four of the ten codes—1, 2, 4, and 10—got it wrong. Compilers will restructure nested loops to optimize cache performance, but may not do so if the loop structure is too complex, or the loop body includes conditionals, complex addressing, or function calls. In code 1, the compiler failed to invert a key loop because of complex addressing do I = 0, 1010, delta_x IM = I - delta_x IP = I + delta_x do J = 5, 995, delta_x JM = J - delta_x JP = J + delta_x T1 = CA1(IP, J) + CA1(I, JP) T2 = CA1(IM, J) + CA1(I, JM) S1 = T1 + T2 - 4 * CA1(I, J) CA(I, J) = CA1(I, J) + D * S1 end do end do In code 2, the culprit is conditionals do I = 1, N do J = 1, N If (IFLAG(I,J) .EQ. 0) then T1 = Value(I, J-1) T2 = Value(I-1, J) T3 = Value(I, J) T4 = Value(I+1, J) T5 = Value(I, J+1) Value(I,J) = 0.25 * (T1 + T2 + T5 + T4) Delta = ABS(T3 - Value(I,J)) If (Delta .GT. MaxDelta) MaxDelta = Delta endif enddo enddo I fixed both programs by inverting the loops by hand. Code 10 has three-dimensional arrays and triply nested loops. The structure of the most computationally intensive loops is too complex to invert automatically or by hand. The only practical solution is to transpose the arrays so that the dimension accessed by the innermost loop is in cache order. The arrays can be transposed at construction or prior to entering a computationally intensive section of code. The former requires all array references to be modified, while the latter is cost effective only if the cost of the transpose is amortized over many accesses. I used the second approach to optimize code 10. Code 5 has four-dimensional arrays and loops are nested four deep. For all of the reasons cited above the compiler is not able to restructure three key loops. Assume C arrays and let the four dimensions of the arrays be i, j, k, and l. In the original code, the index structure of the three loops is L1: for i L2: for i L3: for i for l for l for j for k for j for k for j for k for l So only L3 accesses array elements in cache order. L1 is a very complex loop—much too complex to invert. I brought the loop into cache alignment by transposing the second and fourth dimensions of the arrays. Since the code uses a macro to compute all array indexes, I effected the transpose at construction and changed the macro appropriately. The dimensions of the new arrays are now: i, l, k, and j. L3 is a simple loop and easily inverted. L2 has a loop-carried scalar dependence in k. By promoting the scalar name that carries the dependence to an array, I was able to invert the third and fourth subloops aligning the loop with cache. Code 5 is by far the most difficult of the four codes to optimize for array accesses; but the knowledge required to fix the problems is no more than that required for the other codes. I would judge this code at the limits of, but not beyond, the capabilities of appropriately trained computational scientists. Array Strides When a cache miss occurs, a line (64 bytes) rather than just one word is loaded into the cache. If data is accessed stride 1, than the cost of the miss is amortized over 8 words. Any stride other than one reduces the cost savings. Two of the ten codes studied suffered from non-unit strides. The codes represent two important classes of "strided" codes. Code 1 employs a multi-grid algorithm to reduce time to convergence. The grids are every tenth, fifth, second, and unit element. Since time to convergence is inversely proportional to the distance between elements, coarse grids converge quickly providing good starting values for finer grids. The better starting values further reduce the time to convergence. The downside is that grids of every nth element, n > 1, introduce non-unit strides into the computation. In the original code, much of the savings of the multi-grid algorithm were lost due to this problem. I eliminated the problem by compressing (copying) coarse grids into continuous memory, and rewriting the computation as a function of the compressed grid. On convergence, I copied the final values of the compressed grid back to the original grid. The savings gained from unit stride access of the compressed grid more than paid for the cost of copying. Using compressed grids, the loop from code 1 included in the previous section becomes do j = 1, GZ do i = 1, GZ T1 = CA(i+0, j-1) + CA(i-1, j+0) T4 = CA1(i+1, j+0) + CA1(i+0, j+1) S1 = T1 + T4 - 4 * CA1(i+0, j+0) CA(i+0, j+0) = CA1(i+0, j+0) + DD * S1 enddo enddo where CA and CA1 are compressed arrays of size GZ. Code 7 traverses a list of objects selecting objects for later processing. The labels of the selected objects are stored in an array. The selection step has unit stride, but the processing steps have irregular stride. A fix is to save the parameters of the selected objects in temporary arrays as they are selected, and pass the temporary arrays to the processing functions. The fix is practical if the same parameters are used in selection as in processing, or if processing comprises a series of distinct steps which use overlapping subsets of the parameters. Both conditions are true for code 7, so I achieved significant improvement by copying parameters to temporary arrays during selection. Data reuse In the previous sections, we optimized for spatial locality. It is also important to optimize for temporal locality. Once read, a datum should be used as much as possible before it is forced from cache. Loop fusion and loop unrolling are two techniques that increase temporal locality. Unfortunately, both techniques increase register pressure—as loop bodies become larger, the number of registers required to hold temporary values grows. Once register spilling occurs, any gains evaporate quickly. For multiprocessors with small register sets or small caches, the sweet spot can be very small. In the ten codes presented here, I found no opportunities for loop fusion and only two opportunities for loop unrolling (codes 1 and 3). In code 1, unrolling the outer and inner loop one iteration increases the number of result values computed by the loop body from 1 to 4, do J = 1, GZ-2, 2 do I = 1, GZ-2, 2 T1 = CA1(i+0, j-1) + CA1(i-1, j+0) T2 = CA1(i+1, j-1) + CA1(i+0, j+0) T3 = CA1(i+0, j+0) + CA1(i-1, j+1) T4 = CA1(i+1, j+0) + CA1(i+0, j+1) T5 = CA1(i+2, j+0) + CA1(i+1, j+1) T6 = CA1(i+1, j+1) + CA1(i+0, j+2) T7 = CA1(i+2, j+1) + CA1(i+1, j+2) S1 = T1 + T4 - 4 * CA1(i+0, j+0) S2 = T2 + T5 - 4 * CA1(i+1, j+0) S3 = T3 + T6 - 4 * CA1(i+0, j+1) S4 = T4 + T7 - 4 * CA1(i+1, j+1) CA(i+0, j+0) = CA1(i+0, j+0) + DD * S1 CA(i+1, j+0) = CA1(i+1, j+0) + DD * S2 CA(i+0, j+1) = CA1(i+0, j+1) + DD * S3 CA(i+1, j+1) = CA1(i+1, j+1) + DD * S4 enddo enddo The loop body executes 12 reads, whereas as the rolled loop shown in the previous section executes 20 reads to compute the same four values. In code 3, two loops are unrolled 8 times and one loop is unrolled 4 times. Here is the before for (k = 0; k < NK[u]; k++) { sum = 0.0; for (y = 0; y < NY; y++) { sum += W[y][u][k] * delta[y]; } backprop[i++]=sum; } and after code for (k = 0; k < KK - 8; k+=8) { sum0 = 0.0; sum1 = 0.0; sum2 = 0.0; sum3 = 0.0; sum4 = 0.0; sum5 = 0.0; sum6 = 0.0; sum7 = 0.0; for (y = 0; y < NY; y++) { sum0 += W[y][0][k+0] * delta[y]; sum1 += W[y][0][k+1] * delta[y]; sum2 += W[y][0][k+2] * delta[y]; sum3 += W[y][0][k+3] * delta[y]; sum4 += W[y][0][k+4] * delta[y]; sum5 += W[y][0][k+5] * delta[y]; sum6 += W[y][0][k+6] * delta[y]; sum7 += W[y][0][k+7] * delta[y]; } backprop[k+0] = sum0; backprop[k+1] = sum1; backprop[k+2] = sum2; backprop[k+3] = sum3; backprop[k+4] = sum4; backprop[k+5] = sum5; backprop[k+6] = sum6; backprop[k+7] = sum7; } for one of the loops unrolled 8 times. Optimizing for temporal locality is the most difficult optimization considered in this paper. The concepts are not difficult, but the sweet spot is small. Identifying where the program can benefit from loop unrolling or loop fusion is not trivial. Moreover, it takes some effort to get it right. Still, educating scientific programmers about temporal locality and teaching them how to optimize for it will pay dividends. Reducing instruction count Execution time is a function of instruction count. Reduce the count and you usually reduce the time. The best solution is to use a more efficient algorithm; that is, an algorithm whose order of complexity is smaller, that converges quicker, or is more accurate. Optimizing source code without changing the algorithm yields smaller, but still significant, gains. This paper considers only the latter because the intent is to study how much better codes can run if written by programmers schooled in basic code optimization techniques. The ten codes studied benefited from three types of "instruction reducing" optimizations. The two most prevalent were hoisting invariant memory and data operations out of inner loops. The third was eliminating unnecessary data copying. The nature of these inefficiencies is language dependent. Memory operations The semantics of C make it difficult for the compiler to determine all the invariant memory operations in a loop. The problem is particularly acute for loops in functions since the compiler may not know the values of the function's parameters at every call site when compiling the function. Most compilers support pragmas to help resolve ambiguities; however, these pragmas are not comprehensive and there is no standard syntax. To guarantee that invariant memory operations are not executed repetitively, the user has little choice but to hoist the operations by hand. The problem is not as severe in Fortran programs because in the absence of equivalence statements, it is a violation of the language's semantics for two names to share memory. Codes 3 and 5 are C programs. In both cases, the compiler did not hoist all invariant memory operations from inner loops. Consider the following loop from code 3 for (y = 0; y < NY; y++) { i = 0; for (u = 0; u < NU; u++) { for (k = 0; k < NK[u]; k++) { dW[y][u][k] += delta[y] * I1[i++]; } } } Since dW[y][u] can point to the same memory space as delta for one or more values of y and u, assignment to dW[y][u][k] may change the value of delta[y]. In reality, dW and delta do not overlap in memory, so I rewrote the loop as for (y = 0; y < NY; y++) { i = 0; Dy = delta[y]; for (u = 0; u < NU; u++) { for (k = 0; k < NK[u]; k++) { dW[y][u][k] += Dy * I1[i++]; } } } Failure to hoist invariant memory operations may be due to complex address calculations. If the compiler can not determine that the address calculation is invariant, then it can hoist neither the calculation nor the associated memory operations. As noted above, code 5 uses a macro to address four-dimensional arrays #define MAT4D(a,q,i,j,k) (double *)((a)->data + (q)*(a)->strides[0] + (i)*(a)->strides[3] + (j)*(a)->strides[2] + (k)*(a)->strides[1]) The macro is too complex for the compiler to understand and so, it does not identify any subexpressions as loop invariant. The simplest way to eliminate the address calculation from the innermost loop (over i) is to define a0 = MAT4D(a,q,0,j,k) before the loop and then replace all instances of *MAT4D(a,q,i,j,k) in the loop with a0[i] A similar problem appears in code 6, a Fortran program. The key loop in this program is do n1 = 1, nh nx1 = (n1 - 1) / nz + 1 nz1 = n1 - nz * (nx1 - 1) do n2 = 1, nh nx2 = (n2 - 1) / nz + 1 nz2 = n2 - nz * (nx2 - 1) ndx = nx2 - nx1 ndy = nz2 - nz1 gxx = grn(1,ndx,ndy) gyy = grn(2,ndx,ndy) gxy = grn(3,ndx,ndy) balance(n1,1) = balance(n1,1) + (force(n2,1) * gxx + force(n2,2) * gxy) * h1 balance(n1,2) = balance(n1,2) + (force(n2,1) * gxy + force(n2,2) * gyy)*h1 end do end do The programmer has written this loop well—there are no loop invariant operations with respect to n1 and n2. However, the loop resides within an iterative loop over time and the index calculations are independent with respect to time. Trading space for time, I precomputed the index values prior to the entering the time loop and stored the values in two arrays. I then replaced the index calculations with reads of the arrays. Data operations Ways to reduce data operations can appear in many forms. Implementing a more efficient algorithm produces the biggest gains. The closest I came to an algorithm change was in code 4. This code computes the inner product of K-vectors A(i) and B(j), 0 = i < N, 0 = j < M, for most values of i and j. Since the program computes most of the NM possible inner products, it is more efficient to compute all the inner products in one triply-nested loop rather than one at a time when needed. The savings accrue from reading A(i) once for all B(j) vectors and from loop unrolling. for (i = 0; i < N; i+=8) { for (j = 0; j < M; j++) { sum0 = 0.0; sum1 = 0.0; sum2 = 0.0; sum3 = 0.0; sum4 = 0.0; sum5 = 0.0; sum6 = 0.0; sum7 = 0.0; for (k = 0; k < K; k++) { sum0 += A[i+0][k] * B[j][k]; sum1 += A[i+1][k] * B[j][k]; sum2 += A[i+2][k] * B[j][k]; sum3 += A[i+3][k] * B[j][k]; sum4 += A[i+4][k] * B[j][k]; sum5 += A[i+5][k] * B[j][k]; sum6 += A[i+6][k] * B[j][k]; sum7 += A[i+7][k] * B[j][k]; } C[i+0][j] = sum0; C[i+1][j] = sum1; C[i+2][j] = sum2; C[i+3][j] = sum3; C[i+4][j] = sum4; C[i+5][j] = sum5; C[i+6][j] = sum6; C[i+7][j] = sum7; }} This change requires knowledge of a typical run; i.e., that most inner products are computed. The reasons for the change, however, derive from basic optimization concepts. It is the type of change easily made at development time by a knowledgeable programmer. In code 5, we have the data version of the index optimization in code 6. Here a very expensive computation is a function of the loop indices and so cannot be hoisted out of the loop; however, the computation is invariant with respect to an outer iterative loop over time. We can compute its value for each iteration of the computation loop prior to entering the time loop and save the values in an array. The increase in memory required to store the values is small in comparison to the large savings in time. The main loop in Code 8 is doubly nested. The inner loop includes a series of guarded computations; some are a function of the inner loop index but not the outer loop index while others are a function of the outer loop index but not the inner loop index for (j = 0; j < N; j++) { for (i = 0; i < M; i++) { r = i * hrmax; R = A[j]; temp = (PRM[3] == 0.0) ? 1.0 : pow(r, PRM[3]); high = temp * kcoeff * B[j] * PRM[2] * PRM[4]; low = high * PRM[6] * PRM[6] / (1.0 + pow(PRM[4] * PRM[6], 2.0)); kap = (R > PRM[6]) ? high * R * R / (1.0 + pow(PRM[4]*r, 2.0) : low * pow(R/PRM[6], PRM[5]); < rest of loop omitted > }} Note that the value of temp is invariant to j. Thus, we can hoist the computation for temp out of the loop and save its values in an array. for (i = 0; i < M; i++) { r = i * hrmax; TEMP[i] = pow(r, PRM[3]); } [N.B. – the case for PRM[3] = 0 is omitted and will be reintroduced later.] We now hoist out of the inner loop the computations invariant to i. Since the conditional guarding the value of kap is invariant to i, it behooves us to hoist the computation out of the inner loop, thereby executing the guard once rather than M times. The final version of the code is for (j = 0; j < N; j++) { R = rig[j] / 1000.; tmp1 = kcoeff * par[2] * beta[j] * par[4]; tmp2 = 1.0 + (par[4] * par[4] * par[6] * par[6]); tmp3 = 1.0 + (par[4] * par[4] * R * R); tmp4 = par[6] * par[6] / tmp2; tmp5 = R * R / tmp3; tmp6 = pow(R / par[6], par[5]); if ((par[3] == 0.0) && (R > par[6])) { for (i = 1; i <= imax1; i++) KAP[i] = tmp1 * tmp5; } else if ((par[3] == 0.0) && (R <= par[6])) { for (i = 1; i <= imax1; i++) KAP[i] = tmp1 * tmp4 * tmp6; } else if ((par[3] != 0.0) && (R > par[6])) { for (i = 1; i <= imax1; i++) KAP[i] = tmp1 * TEMP[i] * tmp5; } else if ((par[3] != 0.0) && (R <= par[6])) { for (i = 1; i <= imax1; i++) KAP[i] = tmp1 * TEMP[i] * tmp4 * tmp6; } for (i = 0; i < M; i++) { kap = KAP[i]; r = i * hrmax; < rest of loop omitted > } } Maybe not the prettiest piece of code, but certainly much more efficient than the original loop, Copy operations Several programs unnecessarily copy data from one data structure to another. This problem occurs in both Fortran and C programs, although it manifests itself differently in the two languages. Code 1 declares two arrays—one for old values and one for new values. At the end of each iteration, the array of new values is copied to the array of old values to reset the data structures for the next iteration. This problem occurs in Fortran programs not included in this study and in both Fortran 77 and Fortran 90 code. Introducing pointers to the arrays and swapping pointer values is an obvious way to eliminate the copying; but pointers is not a feature that many Fortran programmers know well or are comfortable using. An easy solution not involving pointers is to extend the dimension of the value array by 1 and use the last dimension to differentiate between arrays at different times. For example, if the data space is N x N, declare the array (N, N, 2). Then store the problem’s initial values in (_, _, 2) and define the scalar names new = 2 and old = 1. At the start of each iteration, swap old and new to reset the arrays. The old–new copy problem did not appear in any C program. In programs that had new and old values, the code swapped pointers to reset data structures. Where unnecessary coping did occur is in structure assignment and parameter passing. Structures in C are handled much like scalars. Assignment causes the data space of the right-hand name to be copied to the data space of the left-hand name. Similarly, when a structure is passed to a function, the data space of the actual parameter is copied to the data space of the formal parameter. If the structure is large and the assignment or function call is in an inner loop, then copying costs can grow quite large. While none of the ten programs considered here manifested this problem, it did occur in programs not included in the study. A simple fix is always to refer to structures via pointers. Optimizing loop structures Since scientific programs spend almost all their time in loops, efficient loops are the key to good performance. Conditionals, function calls, little instruction level parallelism, and large numbers of temporary values make it difficult for the compiler to generate tightly packed, highly efficient code. Conditionals and function calls introduce jumps that disrupt code flow. Users should eliminate or isolate conditionls to their own loops as much as possible. Often logical expressions can be substituted for if-then-else statements. For example, code 2 includes the following snippet MaxDelta = 0.0 do J = 1, N do I = 1, M < code omitted > Delta = abs(OldValue ? NewValue) if (Delta > MaxDelta) MaxDelta = Delta enddo enddo if (MaxDelta .gt. 0.001) goto 200 Since the only use of MaxDelta is to control the jump to 200 and all that matters is whether or not it is greater than 0.001, I made MaxDelta a boolean and rewrote the snippet as MaxDelta = .false. do J = 1, N do I = 1, M < code omitted > Delta = abs(OldValue ? NewValue) MaxDelta = MaxDelta .or. (Delta .gt. 0.001) enddo enddo if (MaxDelta) goto 200 thereby, eliminating the conditional expression from the inner loop. A microprocessor can execute many instructions per instruction cycle. Typically, it can execute one or more memory, floating point, integer, and jump operations. To be executed simultaneously, the operations must be independent. Thick loops tend to have more instruction level parallelism than thin loops. Moreover, they reduce memory traffice by maximizing data reuse. Loop unrolling and loop fusion are two techniques to increase the size of loop bodies. Several of the codes studied benefitted from loop unrolling, but none benefitted from loop fusion. This observation is not too surpising since it is the general tendency of programmers to write thick loops. As loops become thicker, the number of temporary values grows, increasing register pressure. If registers spill, then memory traffic increases and code flow is disrupted. A thick loop with many temporary values may execute slower than an equivalent series of thin loops. The biggest gain will be achieved if the thick loop can be split into a series of independent loops eliminating the need to write and read temporary arrays. I found such an occasion in code 10 where I split the loop do i = 1, n do j = 1, m A24(j,i)= S24(j,i) * T24(j,i) + S25(j,i) * U25(j,i) B24(j,i)= S24(j,i) * T25(j,i) + S25(j,i) * U24(j,i) A25(j,i)= S24(j,i) * C24(j,i) + S25(j,i) * V24(j,i) B25(j,i)= S24(j,i) * U25(j,i) + S25(j,i) * V25(j,i) C24(j,i)= S26(j,i) * T26(j,i) + S27(j,i) * U26(j,i) D24(j,i)= S26(j,i) * T27(j,i) + S27(j,i) * V26(j,i) C25(j,i)= S27(j,i) * S28(j,i) + S26(j,i) * U28(j,i) D25(j,i)= S27(j,i) * T28(j,i) + S26(j,i) * V28(j,i) end do end do into two disjoint loops do i = 1, n do j = 1, m A24(j,i)= S24(j,i) * T24(j,i) + S25(j,i) * U25(j,i) B24(j,i)= S24(j,i) * T25(j,i) + S25(j,i) * U24(j,i) A25(j,i)= S24(j,i) * C24(j,i) + S25(j,i) * V24(j,i) B25(j,i)= S24(j,i) * U25(j,i) + S25(j,i) * V25(j,i) end do end do do i = 1, n do j = 1, m C24(j,i)= S26(j,i) * T26(j,i) + S27(j,i) * U26(j,i) D24(j,i)= S26(j,i) * T27(j,i) + S27(j,i) * V26(j,i) C25(j,i)= S27(j,i) * S28(j,i) + S26(j,i) * U28(j,i) D25(j,i)= S27(j,i) * T28(j,i) + S26(j,i) * V28(j,i) end do end do Conclusions Over the course of the last year, I have had the opportunity to work with over two dozen academic scientific programmers at leading research universities. Their research interests span a broad range of scientific fields. Except for two programs that relied almost exclusively on library routines (matrix multiply and fast Fourier transform), I was able to improve significantly the single processor performance of all codes. Improvements range from 2x to 15.5x with a simple average of 4.75x. Changes to the source code were at a very high level. I did not use sophisticated techniques or programming tools to discover inefficiencies or effect the changes. Only one code was parallel despite the availability of parallel systems to all developers. Clearly, we have a problem—personal scientific research codes are highly inefficient and not running parallel. The developers are unaware of simple optimization techniques to make programs run faster. They lack education in the art of code optimization and parallel programming. I do not believe we can fix the problem by publishing additional books or training manuals. To date, the developers in questions have not studied the books or manual available, and are unlikely to do so in the future. Short courses are a possible solution, but I believe they are too concentrated to be much use. The general concepts can be taught in a three or four day course, but that is not enough time for students to practice what they learn and acquire the experience to apply and extend the concepts to their codes. Practice is the key to becoming proficient at optimization. I recommend that graduate students be required to take a semester length course in optimization and parallel programming. We would never give someone access to state-of-the-art scientific equipment costing hundreds of thousands of dollars without first requiring them to demonstrate that they know how to use the equipment. Yet the criterion for time on state-of-the-art supercomputers is at most an interesting project. Requestors are never asked to demonstrate that they know how to use the system, or can use the system effectively. A semester course would teach them the required skills. Government agencies that fund academic scientific research pay for most of the computer systems supporting scientific research as well as the development of most personal scientific codes. These agencies should require graduate schools to offer a course in optimization and parallel programming as a requirement for funding. About the Author John Feo received his Ph.D. in Computer Science from The University of Texas at Austin in 1986. After graduate school, Dr. Feo worked at Lawrence Livermore National Laboratory where he was the Group Leader of the Computer Research Group and principal investigator of the Sisal Language Project. In 1997, Dr. Feo joined Tera Computer Company where he was project manager for the MTA, and oversaw the programming and evaluation of the MTA at the San Diego Supercomputer Center. In 2000, Dr. Feo joined Sun Microsystems as an HPC application specialist. He works with university research groups to optimize and parallelize scientific codes. Dr. Feo has published over two dozen research articles in the areas of parallel parallel programming, parallel programming languages, and application performance.

    Read the article

  • Vmware Workstation in Ubuntu 9.10 Karmic Koala

    - by kzh
    I am unable to get vmware workstation to work in Ubuntu 9.10. The same installer worked fine in 9.04. Installation is successful, but initialization is not. Does anybody know a fix? $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 9.10 Release: 9.10 Codename: karmic VMware-Workstation-for-Linux-64bit-6.5.1-126130.x86_64 I don't think my key will work for version 7, sadly. I have a free 365 day student evaluation license.

    Read the article

  • Word 2010 & 2007 Blue Background on screen as default

    - by poor1
    Default blue background and white text in Microsoft Word. I have just moved to Word 2010 (Student Version now released) and although it is possible to create individual documents with a blue background it is not possible to set the program with a blue background as a default. I understand this was discontinued with Office 2007. The only way I can open a document with a blue background is to create a Template with a blue background and use that for each document I wish to create. I'm sure there must be a method of hacking the registry to accomplish this. Can you assist. There must be countless people who who they knew how.

    Read the article

  • Making an apache module work only for a particular sub domain

    - by Abhinav Upadhyay
    Hi everyone. I am not a regular webmaster , I am a student working on an internship project which is an Apache2 module, so my knowledge of Apache configuration is limited. I want to configure my module for a particular sub domain of the host server. Lets say I want my module to work only for onclick.localhost , then what are the directives required ? I want the module to be invoked only for the hosts/virtualhosts for which it has been configured explicitly. I know how to setup sub domains in Apache, so that's not a problem. Thanks.

    Read the article

  • Computer hobby and more?

    - by John
    I have been a fulltime student recently working on graduate work to complete a graduate degree. While continuing my studies I have maintained my computer hobby. However, recently my computer hobby has been threatening to turn into a full-fledged side business. Because I am starting to have people come to me for computer help who I have never met before (who generally heard word-of-mouth from other people whose computers I looked at) I am seriously considering putting my conditions for working on a computer into writing (for potential damage control and perhaps liability reasons). Are there any standards for this that I should reference? Should responsibility be waived for times when the computer is left in my care or any time I look at a machine? Any advice you can provide here would be appreciated. What other lessons have you learned that I should be aware of in relation to helping people while continuing my studies as a hobby? Thank you in advance.

    Read the article

  • Computer hobby and repairs

    - by John
    I have been a fulltime student recently working on graduate work to complete a graduate degree. While continuing my studies I have maintained my computer hobby. However, recently my computer hobby has been threatening to turn into a full-fledged side business. Because I am starting to have people come to me for computer help who I have never met before (who generally heard word-of-mouth from other people whose computers I looked at) I am seriously considering putting my conditions for working on a computer into writing (for potential damage control and perhaps liability reasons). Are there any standards for this that I should reference? Should responsibility be waived for times when the computer is left in my care or any time I look at a machine? Any advice you can provide here would be appreciated. What other lessons have you learned that I should be aware of in relation to helping people while continuing my studies as a hobby? Thank you in advance.

    Read the article

  • How do I access a shared folder using credentials other than the ones I logged in with?

    - by George Sealy
    I have a lab full of Windows 7 machines, and a shared login (user360) that all my students use. I also have a shared folder that they can all have read/write access to (for moving files around easily). My problem is that I also want to be able to create a shared folder for each student for submitting assignments. I can set up a shared folder with permissions for just a single user, and not the 'user360' account. The problem is, when I'm logged in as user360, and I try to open the 'StudentA', Windows never asks me for alternate credentials, it just refuses access because the user360 account is not allowed access. Can anyone suggest a fix for this?

    Read the article

  • Light Voip and IM server for small teams

    - by Sihan Zheng
    So I have a small group that would need a self hosted Im/voip and possibly video conferencing solution. My goal is for a small group of people (no more than 40) to be able to collaborate within a local area network. I need something that is self hosted, so unfortunately outside solutions like Skype and hosted Lync would not work. I'm looking for something that would allow both one on one, and group communication, so and IRC server would not work. I'm hopefully looking for something that does not require multiple servers, or is too complex to set up. As a student, I have a license of Lync 2013, but setting that up on a single server without active directory is practically impossible. Would Lync 2010 be easier to do on a single server? Are there any other good solutions? Thanks

    Read the article

  • Windows 7 : Any way to disable "show caracter" in WIFI network properties?!

    - by Fox
    Hi everyone, Here's my issue. I'm working in a school as IT Tech and I'm currently planning to roll out Windows 7 on students laptop. The issue is : When you go to the properties of a WIFI network, you have the fields to input the WIFI key, WPA2 key here in my case, and you also have a checkbox that allow you to "unmask" the caracters of the wifi key. This is actually the problem. Anyone who can access the WIFI network properties, will be able to see the WIFI key, which is really an issue in a school envrironnement where student are all eager to get the key for their precious IPod Touch, what I don't want to happen for obvious reasons... So, is there a way to disable that checkbox or else, make the field cleared out when the checkbox is checked, just like it was on Windows XP or Vista? Thanks all for your answer.

    Read the article

  • Monitor for HD video editing

    - by Kato
    I have been researching for days and nights on a good monitor to buy for a Mac Pro with an ATI Radeon 2600 XT (256mb). It will be used extensively for HD video editing (1080p) and photo editing, and likely also digital/3D animation next year(a lot of FCP + CS4). I am a student, so money is a little bit of an issue, but I want something that I'll be able to use semi-professionally after I'm done school, and am willing to finance something if it is worth the cost. I'm HOPING for something under $1000 though. The IPS Ultrasharps from Dell seem to be getting good reviews from other video editors. Accurate colour correction is a concern for me (hopefully something that covers Adobe spectrum), as well as a decent response time, HD resolutions, and DVI port. Also something with good gradient/definition in black areas, as this is difficult for editing on most LCDs. 1X1 pixel, brightness, good DVD playback etc. Hopefully this is not impossible to find for under $2000!

    Read the article

  • Survey of project-administration experience [on hold]

    - by Salvador Beltrán
    My name is Salvador, I'm a Computer System Eng. Student and I'm searching for people to contribute with my research and I need real opinions - Experience (is an investigation for problems in the Project Management Area), just to be clear it can be any kind of project. If you help me with these 3 questions I would appreciate you so much! :) 1 - Any kind of problem that ocurred during the process of the project administration(Just the description). 2 - What was the impact? 3 - And what was the solution to avoid this problem in some future. 4 - What do you do(Software Engineering,Networking,etc). Thank you very much!

    Read the article

  • How small is too small (of laptop for a programmer)

    - by defn
    Im thinking of replacing my HP Pavilion dv5-1004nr with Acer Aspire AS5738-6444, I'm a CS student... so im torn between screen size (liking the 15in and decent gpu.. but it weight nearly 8 pounds and battery can barely last 2 hours in power saver mode) and wanting something portable to carry to classes/take notes ect (3 pounds and up to 8 hour battery life of the acer) what would you guys suggest? acer any good? i love my hp keyboard.. (or have links to other good laptops, im aiming for 600$ range?)

    Read the article

  • What are some topics you'd like to see covered in an 'Introduction to Network Security' book?

    - by seth.vargo
    I'm trying to put together a list of topics in Network Security and prioritize them accordingly. A little background on the book - we are trying to gear the text towards college students, as an introduction to security, and toward IT professionals who have recently been tasked with securing a network. The idea is to create a book that covers the most vital and important parts of securing a network with no assumptions. So, if you were a novice student interested in network security OR an IT professional who needed a crash course on network security, what topics do you feel would be of the upmost importance in such a text?

    Read the article

  • Best Practices: How can admin deploy software to 100s of PC ?

    - by Gopal
    Hi ... The Environment: I am working for a college. We have a couple of labs (about 100 PCs) for students. At the end of the semester, the PCs will be full of viruses, corrupt system files, all sorts of illegal downloads etc. (everything you can expect from a student environment). At the end of the semester, we would like to wipe out all the systems and do a clean install (WindowsXP + a set of application suites) to get ready for the next batch of students. Question: Is there any free software that will enable an admin to deploy a clean disk image to all the PCs in one go?

    Read the article

< Previous Page | 52 53 54 55 56 57 58 59 60 61 62 63  | Next Page >