MI300 vs Nvidia’s Grace: A Comparison of New Data Center Processors

MI300 and Nvidia’s Grace are two new contenders in the data center market that have garnered a lot of attention in recent months. These processors come with CPU and GPU cores on the same package with HBM memory, making them powerful tools for data center applications.

The MI300 is a new chip from AMD that is set to launch this year. It features four chiplets with a total of 144 compute cores and 1.2 terabytes of memory bandwidth. It is built on a 5nm process and has 192 megabytes of Infinity Cache, which provides fast access to frequently used data. On the other hand, Nvidia’s Grace is a GPU that features 4 ARM-based chiplets, and has 12 HBM stacks for a total memory capacity of 4 TB/s, making it a formidable competitor in the data center market.

When comparing these two products, there are a number of key features and specifications to consider. The MI300 has more chiplets than Grace, but Grace has more transistors, which allows it to pack more computational power into a smaller space. Grace also has more memory capacity and bandwidth than the MI300, which is important for data center applications that require a lot of memory. However, the MI300 has a larger Infinity Cache, which can provide faster access to frequently used data.

In terms of power consumption, both MI300 and Grace have been designed to be energy efficient, but it remains to be seen which product will be more power-efficient in real-world applications. In terms of performance, both MI300 and Grace are expected to deliver high levels of performance, with Grace having a slight edge in certain benchmarks. However, the performance of both products will depend on the specific workloads they are used for.

One advantage of MI300 is that it is built on AMD’s Infinity Architecture, which provides a scalable and flexible platform for data center workloads. Another advantage is that AMD has a strong track record in the data center market, which could help it gain market share against Nvidia.

On the other hand, one advantage of Grace is that it is built on Nvidia’s CUDA platform, which is widely used in the AI and data center markets. This could make it easier for companies to integrate Grace into their existing workflows. Another advantage is that Nvidia has a strong reputation for delivering high-performance GPUs, which could give it an edge in the market.

In terms of how MI300 and Grace will impact the data center market, it is likely that both products will find a place in the market, but it remains to be seen which product will be more successful. Both products have their strengths and weaknesses, and their success will depend on a number of factors, including performance, power consumption, and pricing.

When compared to Intel’s Ponte Vecchio, MI300 and Grace are both expected to offer better performance and energy efficiency, although Ponte Vecchio is expected to have a higher memory capacity. However, Intel has faced delays and challenges with its GPU roadmap, which could give MI300 and Grace a head start in the market.

In conclusion, both MI300 and Grace are promising new products that could have a significant impact on the data center market. While both products have their strengths and weaknesses, it is difficult to say which product is better suited for data center applications without more information about specific use cases. However, given AMD’s strong track record in the data center market and its scalable Infinity Architecture, MI300 could have an edge in the market. It is important to note that Intel faces significant delays and challenges with its GPU roadmap, which could further strengthen the position of MI300 and Grace.

7 Best Ways to be Successful in Meetings

Meetings are an essential part of any organization and can either make or break a project’s success. As a result, it’s important to approach meetings with preparation, focus, and a goal-oriented mindset. Here are seven ways to be successful in meetings:

  1. Preparation: Before attending a meeting, take the time to review the agenda, understand the purpose of the meeting, and gather any necessary information or materials. This will help you stay focused during the meeting and be ready to contribute.
  2. Active Listening: Pay close attention to what’s being said during the meeting, and avoid distractions such as checking your phone or email. Active listening will help you understand the context of the discussion, and you can respond thoughtfully.
  3. Communication: Clearly and effectively communicate your ideas, opinions, and concerns. Be sure to ask questions when you need clarification and be open to feedback. Good communication skills are key to a productive meeting.
  4. Time Management: Respect the time of others by being on time and keeping the meeting moving along efficiently. Stay focused on the agenda, and avoid getting sidetracked by unrelated discussions.
  5. Goal Oriented: Set clear goals for the meeting and work towards achieving them. Keep the discussion focused on what needs to be done, and avoid getting bogged down in unnecessary details.
  6. Collaboration: Meetings are a time for collaboration, so be open to working with others to achieve common goals. Be willing to compromise, and encourage others to do the same.
  7. Follow-Up: After the meeting, be sure to follow up on any action items or decisions made. This shows that you are engaged, organized, and committed to the success of the project.

In conclusion, successful meetings require preparation, active listening, effective communication, time management, goal orientation, collaboration, and follow-up. By following these seven best practices, you can ensure that your meetings are productive and contribute to the success of your projects.

5 Reasons Why a Programming Job is the Best Career Choice for You

Programming is one of the most in-demand and lucrative careers in the tech industry. With the rise of technology, the demand for programmers has skyrocketed, making it a great time to pursue a career in programming. Here are 5 reasons why a programming job is the best career choice for you:

  1. High demand and good pay: As technology continues to advance and more and more industries are going digital, the demand for programmers has never been higher. And, with high demand comes good pay. Programmers can expect to earn a high salary, with the average salary for a programmer in the US being around $80,000.
  2. Constant learning and growth: Programming is a field that is always evolving, and there are always new languages, frameworks, and tools to learn. This means that as a programmer, you will never stop learning and growing, which can be very rewarding.
  3. Flexibility and remote work: Many programming jobs offer the option of working remotely or having a flexible schedule. This allows you to work from anywhere and have more control over your work-life balance.
  4. Variety of industries and roles: Programming is not just for tech companies. Today, programming skills are in high demand across a wide range of industries, such as finance, healthcare, and retail. This means that as a programmer, you can choose from a wide variety of roles and industries to work in.
  5. Ability to make a positive impact: Programming skills can be used to build and create software that helps people and businesses. With the ability to create and develop software, you can make a positive impact on the world and make a difference in people’s lives.

In conclusion, a programming job offers a range of benefits that make it an excellent career choice. From high demand and good pay to flexibility and remote work, there are many reasons why a programming job is the best career choice for you. So, if you’re looking for a rewarding and fulfilling career, consider pursuing a career in programming.

Codility as a tool for filtering out bad developers

Earlier this week, a headhunter approached me for a Java back-end developer position. She tells me as you might expect that she has a vague understanding of Software Engineering and that they have two tests to give me before a technical interview. These were a psychological test and a Java Codility test that consisted of three tasks. They gave me three hours to finish the exam. The tasks are usually variations of common programming problems used in academia and programming competitions.

The first and second tasks were very similar just varying in complexity. Codility provides a good web interface with great feedback on what is asked of you. This is definitely a step up from coding on a whiteboard interview. You get two tabs where you can quickly generate test data that is passed into a function in the coding tab. Boilerplate is mostly filled out which is great. Most IDEs do this for you nowadays anyways.

The third task is about finding a bug in the code. The way they test this is checking closely on your reading skills. This is key in modifying a couple of lines of code. The interface did not let me add or remove lines. The solution I came up with require me to add a line so I appended it to closing brace. The interface has no way to allow for debugging so you might need to have your own handy.

My C+ result for a Java Test, saw what I did there? :p

Should you filter out developers that do average in these tests?

Probably not. A developer with a decade out of college has already forgotten this kind of coding. Many have never used an array in production. This is part of the reason I got 0% in performance for the second task. I added the array to a list and used methods on the list to solve the task. I did not realized I was being rated on performance and that I had to produce a log n algorithm until I read in the third task that this task will not be rated on performance. At that point, I had no chance to go back. As you can see from my result, performance is 62% of the grade.


Codility is not bad but it should not be your only way to measure a developer skill. If a developer is doing data analysis or someone straight out of college, it is probably a great tool since it is more closely related to their experience. However, I was given the impression that if I do bad on these I was not going to a technical interview. I will probably have somebody write a CRUD site or create a cascading drop down, but these things require several technologies which is probably harder to develop a tool to test for. In the mean time, there is not really a good way to measure a developer talent or algorithm to rank them. Use Codility as part of your score, and not the comprehensive examination.

Gator Tears


Crying Gator

I was helping a friend migrating his website from HostGator.com to another web hosting company. I couldn’t find a easy way to cancel the account from their Dashboard. So, I googled “cancel Host Gator account” and ended up in the following site: https://www.hostgator.com/cancel

Here I met a crying alligator which has a similar anatomy to crocodiles. I don’t know if you all heard the expression Crocodile’s tears that was regularly used by Shakespeare. But, I was under the impression that HostGator.com didn’t really care much for my friend’s business.

My Robinhood experience so far…

I currently trade using ScottTrade and I have been pretty happy with it. They have terrific customer support, but they are about to be acquired by TDAmeritrade. So, before just letting my account rollover, I went to Fat Wallet to research other options. I learned that my experience will remain almost the same. However, I also learned something interesting. There is this new free stock trading site called Robinhood.

Robinhood caught my attention at first because their marketing said: “Stop paying up to $10 for every trade”. I kept reading and realized that they manage this by skipping any research tools and they are only available on Android and iOS. I figured this works for me. Free definitely beats $6.95 per trade. So, I went ahead and started the application to open an account.

They sent me a verification email and then I waited for them to approve my application. A week went by and I did not hear anything back, so I wrote them an email. Apparently, they put my application on hold and didn’t bother to let me know. Then, they asked for a Permanent Resident Card to verify my U.S. residency, so I emailed them a copy of my U.S. passport. A couple of days went by and apparently, that was not enough. They then asked me for a Bank Statement which I promptly emailed back to them. Three whole weeks have gone by and my application has not been approved, yet. The only thing all this emailing back and forth has achieved is a series of customer satisfaction surveys asking for feedback. Well, here it is.

Robinhood’s customer service is nothing compared to what I have right now with ScottTrade. They have proved useless in helping me open an account. I do not remember my experience opening an account with ScottTrade, probably because it was so fast. Also, when I email ScottTrade with questions, they answer in a jiffy. Robinhood, on the other hand, has a lot to learn. I guess you get what you pay for.

ServiceNow script to calculate days until AD account expires

I am just starting to learn how to develop applications and write scripts for ServiceNow. I’m adapting to going from using some of the best tools used for dotNET development to the few options ServiceNow provides (an in-browser IDE with a hit and miss debugger). My employer is not a development house so I get by with Visual Studio Code and some other open source tools.

One of my first tasks was to send an email notification each time an Active Directory account was 10, 7, and 3 days from expiring. But, we quickly discovered LDAP stores this value as a number of 100-nanosecond intervals since January 1, 1601 (UTC). JavaScript does something similar, but it uses milliseconds since January 1, 1970. So, I have to put both in the same unit to be able to subtract one interval from the other.

I added a script in a Field Map inside a Table Transform Map that runs daily to import data from LDAP/AD. This script transforms the value to be imported in the number of days until expiration.

answer = (function transformEntry(source) {

var daysToExpiration = 0;
// Account-Expires attribute comes as source.u_accountexpires from LDAP.
// This value represents the number of 100-nanosecond intervals since January 1, 1601 (UTC).

// If variable is coming null return 0 days
if (source.u_accountexpires == '' || 
    source.u_accountexpires == null || 
    source.u_accountexpires == undefined) {
daysToExpiration = 0


A value of 0 or 0x7FFFFFFFFFFFFFFF (9223372036854775807) indicates that the account never expires. Therefore, we assign a big number for the days. This way the user never gets an email.

else {
if (source.u_accountexpires == 0 || 
    source.u_accountexpires == 9223372036854775807) { 
daysToExpiration = 50000;
else {

I tried to get the JavaScript Date object to work but it did not so I used GlideDateTime from the ServiceNow API for server scripts to do the calculations.
11644473600000 is the 100ns from Jan 1, 1601, to Jan 1, 1970. Added to match LDAP to Javascript.
now.getNumericValue() return the milliseconds from Jan 1, 1970.
Multiply by 10000 to convert from milliseconds(js) to 100 of a nanosecond (LDAP).

var now = new GlideDateTime();

var today = 116444736000000000 + ( now.getNumericValue() * 10000 )

Subtract today in LDAP format and divide by the number of 100 of nanoseconds in a day.

daysToExpiration = ( source.u_accountexpires - today ) / 864000000000;

If the account has already expired, we assign it a 0

if (daysToExpiration < 0) {
    daysToExpiration = 0;

Next is the code that determines if the notification is sent or not, and returns the days to expiration.

daysToExpiration = parseInt(daysToExpiration, 10)

switch (daysToExpiration) {
    case 3:
    case 7:
    case 10:
     //LDAP-disabled users are not sent an email during transform based on 'userAccountControl' attribute
         switch (parseInt(source.u_useraccountcontrol,10)) {
              case 514:
              case 546:
              gs.eventQueue('userid.expired', target, parseInt( daysToExpiration, 10 ), target.email);
          }//inner switch
     } // end switch outer

return daysToExpiration;


Download Script from GitHub